home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 January: Mac OS SDK / Dev.CD Jan 97 SDK1.toast / Development Kits (Disc 1) / AppleScript / Development Tools / Sample Code / 7Edit 3.1 / Sources / SVAEClone.c < prev    next >
Encoding:
Text File  |  1995-11-20  |  2.6 KB  |  110 lines  |  [TEXT/CWIE]

  1. // SVAEClone.c
  2. //
  3. // 7Edit 3.1d1. Original version by Jon Lansdell and Nigel Humphreys.
  4. // 3.1 updates by Greg Sutton.
  5. // ©Apple Computer Inc 1995, all rights reserved.
  6.  
  7. #include "SVAEClone.h"
  8.  
  9. #include "SVEditAEUtils.h"
  10. #include "SVAECreate.h"
  11. #include "SVAEGetData.h"
  12.  
  13.  
  14. #pragma segment AppleEvent
  15.  
  16.  
  17. // Clone an object - only handles text objects
  18.      
  19.      
  20. pascal OSErr    DoClone(const AppleEvent *theAppleEvent, AppleEvent *reply, long refcon)
  21. {
  22. #pragma unused (reply, refcon)
  23.  
  24.     AEDesc        directObj = {typeNull, NULL},
  25.                 insertHereDesc = {typeNull, NULL},
  26.                 resultDesc = {typeNull, NULL};
  27.     OSErr        err;
  28.  
  29.     err = AEGetParamDesc(theAppleEvent, keyDirectObject, typeWildCard, &directObj);
  30.     if (noErr != err) goto done;
  31.  
  32.     err = AEGetParamDesc(theAppleEvent, keyAEInsertHere, typeWildCard, &insertHereDesc);
  33.     if (noErr != err) goto done;
  34.  
  35.     err = GotRequiredParams(theAppleEvent);
  36.     if (noErr != err) goto done;
  37.     
  38.     err = CloneDesc(&directObj, &insertHereDesc, &resultDesc);
  39.     if (noErr != err) goto done;
  40.     
  41.     err = AddResultToReply(&resultDesc, reply, err);
  42.  
  43. done:
  44.     if (directObj.dataHandle)
  45.         AEDisposeDesc(&directObj);
  46.     if (insertHereDesc.dataHandle)
  47.         AEDisposeDesc(&insertHereDesc);
  48.         
  49.     return(err);
  50. }
  51.  
  52. OSErr    CloneTextDesc(AEDesc* textDesc, AEDesc* insertHereDesc, AEDesc* result)
  53. {
  54.     TextToken        aTextToken;
  55.     Size            actualSize;
  56.     AEDesc            dataDesc = {typeNull, NULL},
  57.                     propertyDesc = {typeNull, NULL};    // Use to pass no properties
  58.     OSErr            err;
  59.  
  60.     if (typeMyText != textDesc->descriptorType)
  61.         return(errAETypeError);
  62.         
  63.     GetRawDataFromDescriptor(textDesc, (Ptr)&aTextToken, sizeof(aTextToken), &actualSize);
  64.     
  65.     err = GetTextTextProperty(&aTextToken, &dataDesc);
  66.     if (noErr != err) goto done;
  67.     
  68.     err = CreateText(cText, &dataDesc, insertHereDesc, &propertyDesc, result);
  69.  
  70. done:
  71.     if (dataDesc.dataHandle)
  72.         AEDisposeDesc(&dataDesc);
  73.  
  74.     return(err);
  75. }
  76.  
  77. OSErr    CloneDesc(AEDesc* aDesc, AEDesc* insertHereDesc, AEDesc* result)
  78. {
  79.     AEDesc        cloneDesc = {typeNull, NULL},
  80.                 textDesc = {typeNull, NULL};
  81.     OSErr        err;
  82.     
  83.     if (typeObjectSpecifier == aDesc->descriptorType)
  84.         err = AEResolve(aDesc, kAEIDoMinimum, &cloneDesc);
  85.     else
  86.         err = AEDuplicateDesc(aDesc, &cloneDesc);
  87.         
  88.     if (noErr != err) goto done;
  89.     
  90.     switch (cloneDesc.descriptorType)
  91.     {
  92.         case typeAEList:
  93.             err = errAETypeError;
  94.             // We can't handle copying more than one item to the scrap
  95.             break;
  96.             
  97.         default:
  98.             err = AECoerceDesc(&cloneDesc, typeMyText, &textDesc);
  99.             if (noErr != err) goto done;
  100.             err = CloneTextDesc(&textDesc, insertHereDesc, result);
  101.     }
  102.     
  103. done:
  104.     if (cloneDesc.dataHandle)
  105.         AEDisposeDesc(&cloneDesc);
  106.     if (textDesc.dataHandle)
  107.         AEDisposeDesc(&textDesc);
  108.     
  109.     return(err);
  110. }